1. РАБОТА С ТАБЛИЦАМИ JTable
Компонент JTable предназначен для отображения данных в виде таблицы.

|
№ п/п |
Свойство |
Назначение |
|
1. |
model |
МОДЕЛЬ ТАБЛИЦЫ |
|
2. |
selectionModel |
Выбор режима выделения данных (выбрать «Одиночное выделение») |
|
3. |
autoResizeMode |
Режим масштабирования ширины столбцов таблицы: установить в «OFF» - использовать заданные размеры столбцов, не использовать авто масштабирование столбцов; SUBSEQUENT_COLUMNS – вписать все столбцы в размер таблицы, используя авто масштабирование. |
|
4. |
showHorizontalLines |
Показать горизонтальные линии сетки (да) |
|
5. |
showVerticalLines |
Показать вертикальные линии сетки (да) |
|
6. |
autoCreateRowSorter |
Разрешить сортировку строк по щелчку на заголовке столбца (нет) |
|
7. |
tableHeader |
Разрешить менять мышью столбцы местами и их ширину (нет) |
|
8. |
cellSelectionEnabled |
Разрешить выделять ячейку (да) |
|
9. |
columnSelectionAllowed |
Разрешит выбирать столбец (да) |
|
10. |
rowSelectionAllowed |
Разрешить выбирать строку (да) |
|
11. |
border |
Рамка над областью с данными (установить в «LineBorder») |
|
12. |
fillsViewportHeight |
Заливать фоном свободные от строк области компонента |
|
13. |
columnCount |
Количество колонок (только чтение) |
|
14. |
rowCount |
Количество строк (только для чтения) |
|
15. |
rowHeight |
Высота строк |
|
16. |
font |
Шрифт текста |
|
17. |
foreground |
Цвет текста |
|
18. |
background |
Цвет фона |
|
19. |
gridColor |
Цвет сетки |
|
20. |
selectionBackground |
Цвет фона выделенной ячейки |
|
21. |
selectionForeground |
Цвет текста выделенной ячейки |
|
22. |
enabled |
Доступность компонента |
|
23. |
opaque |
Непрозрачность фона |
|
24. |
focusable |
Разрешение фокуса ввода с клавиатуры |
|
25. |
cursor |
Вид курсора над компонентом |
|
26. |
componentPopupMenu |
Привязка компонента всплывающего меню |
|
27. |
toolTipText |
Всплывающая подсказка над компонентом |
При добавлении таблицы NetBeans автоматически добавляет компонент «JScrollPane», в который встраивает «JTable». Компонент «JScrollPane» необходим для добавления возможности горизонтальной и вертикальной прокрутки у таблицы и не требует какой-либо отдельной настройки.
ПРИМЕЧАНИЕ: При использовании у формы (JFrame) стиля по умолчанию «Nimbus» линии сетки отображаться не будут. Необходимо выбрать любой другой стиль, например «Windows»!
Установка внешнего вида окна в стиле «Windows»
Для установки внешнего вида окна в стиле «Windows», необходимо зайти в программный код окна (вкладка «Источник»), раскрыть весь программный код (нажав на значки «+»), и найти следующий фрагмент кода:
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
Далее, необходимо заменить слово "Nimbus" на слово «Windows», соблюдая регистр символов:

1.1. СТАНДАРТНАЯ МОДЕЛЬ ТАБЛИЦЫ JTable
Для того чтобы задать стандартную двумерную модель таблицы, необходимо войти в свойство «model» таблицы, выбрать режим «Изменяемый код» и вписать в открывшееся поле значение «new DefaultTableModel(7, 5)», где первая цифра - желаемое количество строк, вторая цифра – желаемое количество столбцов. Нажать кнопку «OK».
Данная стандартная модель позволяет динамически (программно) добавлять и удалять строки и столбцы таблицы.

1.2. ПОЛЬЗОВАТЕЛЬСКАЯ МОДЕЛЬ ТАБЛИЦЫ JTable
Для того чтобы задать пользовательскую модель таблицы – т.е. то, что она должна хранить и отображать, необходимо войти в свойство «model» , выбрать режим «Редактор модели таблицы» и указать желаемое количество строк, столбцов, тип столбцов (полей):


1.2.1. Настройка пользовательских полей таблицы JTable
Для того, чтобы детально настроить содержимое таблицы (структуру и тип ее колонок, количество строк, столбцов, ширину каждого столбца) необходимо щелкнуть на таблице правой кнопкой мыши, в появившемся контекстном меню выбрать опцию «Содержание таблицы» и произвести в открывшемся окне необходимые настройки:



ПРИМЕЧАНИЕ: если использовать в типах столбцов какое-либо значение, кроме «Object», то возможность динамически (программно) менять количество столбцов в таблице будет недоступна. Поэтому, указывать конкретный тип столбцов вместо общего типа «Object» целесообразно для случаев, когда таблица должна сама контролировать вводимые данные (например, для полей типа «Integer») и нет необходимости программно менять количество столбцов в таблице. Если необходимо программно менять количество столбцов в таблице, то все поля в модели должны быть типа «Object» и автоматической проверки данных таблица осуществлять не будет.
1.3. ВЫКЛЮЧЕНИЕ ЗАГОЛОВКОВ В ТАБЛИЦЕ JTable
Для того чтобы убрать у таблицы заголовок с названиями столбцов, необходимо зайти в свойство «tableHeader», установить свойство из режима «Редактор заголовка таблицы» в режим «Изменяемый код» и вписать в открывшееся поле значение «null»:

1.4. ПРИМЕРЫ РАБОТЫ С ТАБЛИЦАМИ JTable
1.4.1. Случайные числа в JTable
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Случайные числа в JTable
long k;
for (int i = 0; i < jTable1.getRowCount(); i++) {
for (int j = 0; j < jTable1.getColumnCount(); j++) {
k = Math.round(Math.random() * 10);
jTable1.setValueAt(String.valueOf(k), i, j);
}
}
// jButton2ActionPerformed(null);
}
1.4.2. Сумма цифр в JTable
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Сумма цифр в JTable
long s = 0;
try {
for (int i = 0; i < jTable1.getRowCount(); i++) {
for (int j = 0; j < jTable1.getColumnCount(); j++) {
s += Integer.parseInt(jTable1.getValueAt(i, j).toString());
}
}
jLabel1.setText(String.valueOf(s));
} catch (Exception ee) {
jLabel1.setText("Error");
}
}
1.4.3. Добавление и вставка строк в JTable
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// Добавить и вставка строк в JTable
DefaultTableModel dtm = new DefaultTableModel();
dtm = (DefaultTableModel) jTable1.getModel();
dtm.setRowCount(dtm.getRowCount() + 1); // Добавить в конец новую строку
dtm.insertRow(1, new Object [] {"Первый столбец","123"}); // Вставить во 2 строку новую строку
}
1.4.4. Удаление и перемещение строк в JTable
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
// Удаление и перемещение строк в JTable
DefaultTableModel dtm = new DefaultTableModel();
dtm = (DefaultTableModel) jTable1.getModel();
try {
dtm.setRowCount(dtm.getRowCount() - 1); // Удалить последнюю строку
dtm.removeRow(1); // Удалить 2 строку
dtm.moveRow(0, 2, 3); // Переместить строки 1,2,3 за строкой 4
} catch (Exception e) {;
}
}
1.4.5. Добавление в конец нового столбца в JTable
Только для стандартной модели «new
DefaultTableModel(кол_строк, кол_столбцов)»
или пользовательской модели со всеми столбцами типа «Object»
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
// Добавить столбец в JTable
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
dtm.addColumn("New");
}
1.4.6. Удалить последний столбец в JTable
Только для стандартной модели «new
DefaultTableModel(кол_строк, кол_столбцов)»
или пользовательской модели со всеми столбцами типа «Object»
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {
// Удалить столбец в JTable
DefaultTableModel dtm = new DefaultTableModel();
dtm = (DefaultTableModel) jTable1.getModel();
try {
dtm.setColumnCount(dtm.getColumnCount() - 1);
} catch (Exception e) {
}
}
1.4.7. Выбор ячейки мышью в JTable
private void jTable1_mouseClicked(java.awt.event.MouseEvent evt) {
// Выбор ячейки мышью в JTable
int row = jTable1.getSelectedRow(); // определяем какая строка выбрана
int column = jTable1.getSelectedColumn(); // определяем какой столбец
jLabel2.setText("Значение: " + jTable1.getValueAt(row, column));
}
1.4.8. Выбор ячейки клавиатурой в JTable
private void jTable1KeyReleased(java.awt.event.KeyEvent evt) {
// Выбор ячейки клавиатурой в JTable
// jTable1_mouseClicked(null);
int row = jTable1.getSelectedRow(); // определяем какая строка выбрана
int column = jTable1.getSelectedColumn(); // определяем какой столбец
jLabel2.setText("Значение: " + jTable1.getValueAt(row, column));
}
1.4.9. Инициализация таблицы в JTable
private void formWindowOpened(java.awt.event.WindowEvent evt) {
// Инициализация таблицы в JTable
for (int i = 0; i < jTable1.getColumnCount(); i++) {
// Установка ширины столбцов
jTable1.getColumnModel().getColumn(i).setPreferredWidth(60);
// jTable1.getColumnModel().getColumn(i).setMaxWidth(60);
// jTable1.getColumnModel().getColumn(i).setMinWidth(60);
}
for (int i = 0; i < jTable1.getRowCount(); i++) {
// Установка высоты строк
jTable1.setRowHeight(i, 18);
}
for (int i = 0; i < jTable1.getRowCount(); i++) {
for (int j = 0; j < jTable1.getColumnCount(); j++) {
jTable1.setValueAt("0", i, j);
}
}
}
1.4.10. Обработка данных в таблице JTable
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Обработка данных в таблице JTable
double fk = 1, sum = 0, pr = 1, y = 0;
for (int i = 0; i < jTable1.getRowCount(); i++) {
if (jTable1.getValueAt(i, 0) == null) {
JOptionPane.showMessageDialog(rootPane, "Проверьте правильностью заполнения столбца К(i)", "Ошибка ввода", JOptionPane.ERROR_MESSAGE);
return;
}
}
for (int i = 0; i < jTable1.getRowCount(); i++) {
sum += Integer.parseInt(jTable1.getValueAt(i, 0).toString()); // Расчет суммы
try {
pr *= Integer.parseInt(jTable1.getValueAt(i, 0).toString()); // Расчет произведения
fk *= i + 1; // Расчет факториала
y = (Math.sqrt((pr - sum) / fk) / (i + 1)) * (Math.pow(Math.tan((i + 1) / 2), 2)); // Расчет по заданной формуле
jTable1.setValueAt(
BigDecimal.valueOf(y).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue(), i, 1); // Вывод результата
} catch (Exception e) {
jTable1.setValueAt(0, i, 1);
}
}
}